package com.qinglei.recoup.hmp.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.qinglei.recoup.common.domain.CommonRes;
import com.qinglei.recoup.hmp.pojo.dto.AddUserBindDeviceDTO;
import com.qinglei.recoup.hmp.pojo.parm.DeviceVersionParam;
import com.qinglei.recoup.hmp.pojo.vo.*;
import com.qinglei.recoup.system.pojo.AlarmEventItemVO;
import com.qinglei.recoup.system.pojo.PageParam;
import com.qinglei.recoup.system.pojo.RealTimeDataVOV7;

/**
 * 小程序设备相关接口
 *
 * @author syp
 */
public interface HmpDeviceService {

    /**
     * 物联网平台设备属性名称定义
     */
    String DEVICE_ATTR_BED_LAMP = "V4:LIGHT_L_1";
    String DEVICE_ATTR_NETWORK_LAMP = "V4:LIGHT_L_2";


    /**
     * 检查当前用户是否已绑定设备
     *
     * @param userId
     * @return
     */
    CommonRes<DeviceCheckBindVO> checkBind(Long userId);

    /**
     * 设置设备使用者标签接口
     *
     * @param userId
     * @param param
     * @return
     */
    CommonRes<Object> bindUserTag(Long userId, BindUserTagParam param);

    /**
     * 设置默认设备接口
     *
     * @param userId
     * @param param
     * @return
     */
    CommonRes<Object> setDefaultDevice(Long userId, DeviceSnParam param);

    /**
     * 取消绑定设备接口
     *
     * @param param
     * @return
     */
    CommonRes<Object> cancelBindDevice(Long userId, DeviceSnParam param);

    /**
     * 进入实时数据模式接口
     */
    CommonRes<Object> enterRealtime(Long userId, DeviceSnParam param);

    /**
     * 新增微信用户和设备的绑定关系
     *
     * @param param
     */
    void addHmpDevice(AddUserBindDeviceDTO param);

    /**
     * 查询更多设备接口
     *
     * @param userId
     * @param param
     * @return
     */
    CommonRes<IPage<DeviceVO>> getDevicePage(Long userId, PageParam param);

    /**
     * 设置设备属性接口
     *
     * @param userId
     * @param param
     * @return
     */
    CommonRes<Object> setDeviceAttr(Long userId, DeviceAttrParam param);

    /**
     * 获取睡眠日历接口
     *
     * @param userId
     * @param param
     * @return
     */
    CommonRes<DeviceDetailVO> getDeviceDetail(Long userId, DeviceDetailParam param);

    /**
     * 获取设备实时数据接口
     *
     * @param userId
     * @param sn
     * @param second
     * @param tenantId
     * @return
     */
    CommonRes<DeviceRealTimeVO> getRealTimeData(Long userId, String sn, Integer second, Integer tenantId);

    /**
     * 查询设备报警信息列表接口
     *
     * @param userId
     * @param param
     * @return
     */
    CommonRes<IPage<AlarmEventItemVO>> getAlarmEventList(Long userId, AlarmEventPageParam param);

    /**
     * 将报警信息设置为已读状态接口
     *
     * @param userId
     * @param tenantId
     * @return
     */
    CommonRes<Object> setReadAlarmEvent(Long userId, Integer tenantId, AlarmEventFinishParam param);


    /**
     * 检查设备状态
     * @param param
     * @return
     */
    CommonRes<CheckDeviceVersionVo> checkDeviceVersion(DeviceVersionParam param);
    /**
     * 获取设备实时数据接口
     *
     * @param userId
     * @param sn
     * @param second
     * @param tenantId
     * @return
     */
    CommonRes<RealTimeDataVOV7> getMiniRealTimeDataV7(Long userId, String sn, Integer second, Integer tenantId);

    /**
     * 获取WEB设备实时数据接口
     *
     * @param sn
     * @param second
     * @param tenantId
     * @return
     */
    CommonRes<RealTimeDataVOV7> getWebRealTimeDataV7(String sn, Integer second, Integer tenantId);


    /**
     * 清楚V7缓存
     * @param sn
     */
    void deleteV7RealTimeData(String sn);
}
